import pandas as pd
import matplotlib.pyplot as plt
import os
from sklearn.preprocessing import MinMaxScaler

# 设置中文字体和字体大小
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 14  # 设置字体大小

# 创建保存图片的文件夹
output_dir = '数据清洗/images'
os.makedirs(output_dir, exist_ok=True)

# 加载数据
df = pd.read_csv('Data\\Cleaned_EVUsage_Data.csv')

# 将时间列转换为datetime类型
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])
df['Transaction Date (Pacific Time)'] = pd.to_datetime(df['Transaction Date (Pacific Time)'])

# 将时长列转换为timedelta类型
df['Total Duration'] = pd.to_timedelta(df['Total Duration (hh:mm:ss)'])
df['Charging Time'] = pd.to_timedelta(df['Charging Time (hh:mm:ss)'])

# 设置柱状图的颜色主题
hist_color = 'skyblue'

# 绘制能量消耗的直方图
plt.figure(figsize=(10, 6))
plt.hist(df['Energy (kWh)'], bins=30, edgecolor='black', color=hist_color)
plt.title('能量消耗分布')
plt.xlabel('能量 (kWh)')
plt.ylabel('频率')
plt.grid(True)
plt.savefig(os.path.join(output_dir, '能量消耗分布.png'), dpi=300)
plt.close()

# 绘制温室气体节省的直方图
plt.figure(figsize=(10, 6))
plt.hist(df['GHG Savings (kg)'], bins=30, edgecolor='black', color=hist_color)
plt.title('温室气体节省分布')
plt.xlabel('温室气体节省 (kg)')
plt.ylabel('频率')
plt.grid(True)
plt.savefig(os.path.join(output_dir, '温室气体节省分布.png'), dpi=300)
plt.close()

# 绘制收费的直方图
plt.figure(figsize=(10, 6))
plt.hist(df['Fee'], bins=30, edgecolor='black', color=hist_color)
plt.title('收费分布')
plt.xlabel('收费 (USD)')
plt.ylabel('频率')
plt.grid(True)
plt.savefig(os.path.join(output_dir, '收费分布.png'), dpi=300)
plt.close()

# 设置散点图的颜色主题
scatter_cmap = plt.get_cmap('viridis')

# 绘制充电时间的散点图
plt.figure(figsize=(10, 6))
plt.scatter(df['Start Date'], df['Charging Time'].dt.total_seconds() / 3600, alpha=0.5, c=df['Charging Time'].dt.total_seconds(), cmap=scatter_cmap)
plt.colorbar(label='充电时间 (秒)')
plt.title('随时间变化的充电时间')
plt.xlabel('开始日期')
plt.ylabel('充电时间 (小时)')
plt.grid(True)
plt.savefig(os.path.join(output_dir, '随时间变化的充电时间.png'), dpi=300)
plt.close()

# 绘制能量消耗与收费的关系图
plt.figure(figsize=(10, 6))
plt.scatter(df['Energy (kWh)'], df['Fee'], alpha=0.5, c=df['Energy (kWh)'], cmap=scatter_cmap)
plt.colorbar(label='能量 (kWh)')
plt.title('能量消耗与收费的关系')
plt.xlabel('能量 (kWh)')
plt.ylabel('收费 (USD)')
plt.grid(True)
plt.savefig(os.path.join(output_dir, '能量消耗与收费的关系.png'), dpi=300)
plt.close()

# 选择需要绘制直方图的列
cols = ['Energy (kWh)', 'Gasoline Savings (gallons)', 'EVSE ID', 'Longitude', 'Fee']
# 使用颜色差异较大的颜色
colors = ['blue', 'green', 'red', 'orange', 'purple']

# 标准化数据
scaler = MinMaxScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df[cols]), columns=cols)

# 设置画布
plt.figure(figsize=(12, 8))

# 遍历每一列并绘制直方图
for i, col in enumerate(cols):
    plt.hist(df_scaled[col], bins=30, edgecolor='black', color=colors[i], alpha=0.5, label=col)

# 添加标题和标签
plt.title('不同变量的频率直方图（标准化后）')
plt.xlabel('标准化值')
plt.ylabel('频率')
plt.legend(loc='upper right')
plt.grid(True)

# 保存图像
plt.savefig(os.path.join(output_dir, '频率直方图_标准化后.png'), dpi=300)
plt.close()

print(f"所有图片已保存到: {output_dir}")
